
\newpage

\section{Dijkstra算法-只统计联通的节点}
Dijkstra算法适用于加权图，用来寻找从一个起点到图中其他所有顶点的最短路径。该算法的一个重要前提是图中不能含有负权重的边，这是因为算法的贪心策略依赖于边的\redtext{非负权重性质}，以确保局部最优解能够导出全局最优解。

至于Dijkstra算法是否适用于连通图或非连通图，答案是这样的：
\begin{enumerate}
	\item 连通图：Dijkstra算法可以应用于连通图，因为连通图意味着图中任意两点间至少存在一条路径。在这种情况下，Dijkstra算法能够找到从起点到图中所有其他顶点的最短路径。
	\item 非连通图：Dijkstra算法同样可以应用于非连通图，但是它只会找到从起点到可达顶点的最短路径。对于那些与起点不可达的顶点，算法不会计算任何路径，因为不存在从起点到这些顶点的路径。在非连通图中运行Dijkstra算法，最终的最短路径树将只包括与起点连通的部分。
\end{enumerate}
至于“林”（Forest），在图论中，林是指一组不相交的树的集合，也就是说，林是由多个连通成分组成的，每个连通成分都是一棵树。Dijkstra算法可以应用于林，但是它将分别在每棵树上独立运行，找到从指定起点到同一棵树内所有其他顶点的最短路径。对于不同树之间的顶点，Dijkstra算法不会计算任何路径，因为这些顶点之间没有路径连接。
总结来说，Dijkstra算法可以应用于连通图和非连通图，包括林，但它仅能处理正权重的边，并且对于非连通图，它只能找到从起点到可达顶点的最短路径。


\subsubsection{代码思路}
此方法计算从from节点到图中所有其他节点的最短路径距离。
\begin{enumerate}
	\item 初始化：
	创建一个HashMap，命名为distinceMap，用于存储从起始节点到每个节点的最短距离。
	创建一个HashSet，命名为lockNodeSet，用于跟踪那些已经确定了最短路径的节点。
	\item 设置起始节点的距离：
	将起始节点到自身的距离设为0，并将其添加到distinceMap中。对于distinceMap中不存在的节点，默认视为无限远。
	\item 主循环：
	使用getMinNodeFromDistinceMapUnLockedNodeSet方法找到当前未锁定且具有最短距离的节点，记为minNode。
	循环直到minNode为null，即所有节点的最短路径均已确定。
	检查minNode是否已被锁定，如果是，则跳过本次循环迭代。
	获取minNode的当前距离nodeDistince。
	遍历minNode的所有邻接边，对每条边进行以下操作：
	计算通过minNode到达邻接节点toNode的总距离。
	如果toNode尚未在distinceMap中，则将它加入distinceMap并设置其距离为通过minNode到达的总距离。
	如果toNode已在distinceMap中，则更新其距离为通过minNode到达的更短距离（如果存在）。
	将minNode添加到lockNodeSet中，表示其最短路径已确定。
	重复上述过程，直到所有节点的最短路径都被确定。
	\item 返回结果：
	返回distinceMap，其中包含了从起始节点到图中每个节点的最短路径距离。
	这种方法确保了每次迭代都选择距离最短的未锁定节点进行扩展，从而逐步构建出从源节点出发的最短路径树。
\end{enumerate}